package niuke;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 字符串 输出全排序
 * 思路: https://blog.csdn.net/u013309870/article/details/68941284
 */
public class StringPermutation {
    private List<String> stringList = new ArrayList<>();

    public static void main(String[] args) {
        StringPermutation permutation = new StringPermutation();
        String input  = "1134";
        List<String> list =  permutation.permutationDelDump(input.toCharArray(), 0);
        System.out.println(list);
    }

    public void permutation(char array[], int start) {
        if (start == array.length - 1) {
            stringList.add(String.valueOf(array));
            System.out.println(Arrays.toString(array));
            // 如果已经到了数组的最后一个元素，前面的元素已经排好，输出。
        }
        for (int i = start; i <= array.length - 1; i++) {
            // 把第一个元素分别与后面的元素进行交换，递归的调用其子数组进行排序
            swap(array, i, start);
            permutation(array, start + 1);
            swap(array, i, start);
            // 子数组排序返回后要将第一个元素交换回来。进行第二轮头交换
        }
    }

    private List<String> permutationDelDump(char array[], int start) {
        if (start == array.length - 1) {
            stringList.add(String.valueOf(array));
            System.out.println(Arrays.toString(array));
            // 如果已经到了数组的最后一个元素，前面的元素已经排好，输出。
        }
        for (int i = start; i <= array.length - 1; i++) {
            if (i == start || array[start] != array[i]) {
                swap(array, i, start);
                permutationDelDump(array, start + 1);
                swap(array, i, start);
            }
        }
        return stringList;
    }


    private void swap(char chs[], int i, int j) {
        char temp;
        temp = chs[i];
        chs[i] = chs[j];
        chs[j] = temp;
    }
}
